home *** CD-ROM | disk | FTP | other *** search
- unit ComponentDataLink;
-
-
-
- interface
-
-
-
- uses
-
- DB, DBTables, BDE, Classes;
-
-
-
- type
-
- TComponentDataLink = class(TDataLink)
-
- private
-
- fComponent: TComponent;
-
- fDataSet: TDataSet;
-
- fDataSetName: string;
-
- fIndexNames: string;
-
- fOnNewDataSet: TDataSetNotifyEvent;
-
- fOnDataSetOpen: TDataSetNotifyEvent;
-
- fOnDataSetChange: TDataSetNotifyEvent;
-
- fOnIndexChange: TDataSetNotifyEvent;
-
- fOnLayoutChange: TDataSetNotifyEvent;
-
- fOnPostData: TDataSetNotifyEvent;
-
- fOnDataSetClose: TDataSetNotifyEvent;
-
- fOnInvalidDataSet: TDataSetNotifyEvent;
-
- fOnInvalidDataSource: TDataSetNotifyEvent;
-
- fOnDestroyDataLink: TDataSetNotifyEvent;
-
- protected
-
- function GetDataSetName: string; virtual;
-
- procedure SetDataSetName(Value: string); virtual;
-
- procedure ActiveChanged; override;
-
- procedure CheckBrowseMode; override;
-
- procedure DataSetChanged; override;
-
- procedure DataSetScrolled(Distance: Integer); override;
-
- procedure FocusControl(Field: TFieldRef); override;
-
- procedure EditingChanged; override;
-
- procedure LayoutChanged; override;
-
- procedure RecordChanged(Field: TField); override;
-
- procedure UpdateData; override;
-
- public
-
- constructor Create(AComponent: TComponent); virtual;
-
- destructor Destroy; override;
-
- property DataSetName: string
-
- read GetDataSetName
-
- write SetDataSetName;
-
- property OnNewDataSet: TDataSetNotifyEvent
-
- read fOnNewDataSet
-
- write fOnNewDataSet;
-
- property OnDataSetOpen: TDataSetNotifyEvent
-
- read fOnDataSetOpen
-
- write fOnDataSetOpen;
-
- property OnDataSetChange: TDataSetNotifyEvent
-
- read fOnDataSetChange
-
- write fOnDataSetChange;
-
- property OnIndexChange: TDataSetNotifyEvent
-
- read fOnIndexChange
-
- write fOnIndexChange;
-
- property OnLayoutChange: TDataSetNotifyEvent
-
- read fOnLayoutChange
-
- write fOnLayoutChange;
-
- property OnPostData: TDataSetNotifyEvent
-
- read fOnPostData
-
- write fOnPostData;
-
- property OnDataSetClose: TDataSetNotifyEvent
-
- read fOnDataSetClose
-
- write fOnDataSetClose;
-
- property OnInvalidDataSet: TDataSetNotifyEvent
-
- read fOnInvalidDataSet
-
- write fOnInvalidDataSet;
-
- property OnInvalidDataSource: TDataSetNotifyEvent
-
- read fOnInvalidDataSource
-
- write fOnInvalidDataSource;
-
- property OnDestroyDataLink: TDataSetNotifyEvent
-
- read fOnDestroyDataLink
-
- write fOnDestroyDataLink;
-
- end;
-
-
-
- implementation
-
-
-
- constructor TComponentDataLink.Create(AComponent: TComponent);
-
- begin
-
- inherited Create;
-
- fComponent := AComponent;
-
- end;
-
-
-
- destructor TComponentDataLink.Destroy;
-
- begin
-
- if Assigned(fOnDestroyDataLink) then
-
- fOnDestroyDataLink(DataSet);
-
- inherited Destroy;
-
- end;
-
-
-
- function TComponentDataLink.GetDataSetName: string;
-
- begin
-
- Result := fDataSetName;
-
- if DataSet <> nil then
-
- Result := DataSet.Name;
-
- if DataSet is TTable then
-
- Result := TTable(DataSet).TableName;
-
- if DataSet is TQuery then
-
- if DataSet.DataSource <> nil then
-
- Result := TTable(TQuery(DataSet).DataSource.DataSet).TableName;
-
- end;
-
-
-
- procedure TComponentDataLink.SetDataSetName(Value: string);
-
- begin
-
- if fDataSetName <> Value then
-
- fDataSetName := Value;
-
- end;
-
-
-
- procedure TComponentDataLink.ActiveChanged;
-
- begin
-
- if Active then
-
- begin
-
- fDataSet := DataSet;
-
- if DataSetName <> fDataSetName then
-
- begin
-
- fDataSetName := DataSetName;
-
- fIndexNames := TTable(fDataSet).IndexFieldNames;
-
- if Assigned(fOnNewDataSet) then
-
- fOnNewDataSet(DataSet);
-
- end
-
- else
-
- begin
-
- fIndexNames := TTable(DataSet).IndexFieldNames;
-
- if Assigned(fOnDataSetOpen) then
-
- fOnDataSetOpen(DataSet);
-
- end;
-
- end
-
- else
-
- begin
-
- if DataSet = nil then
-
- begin
-
- if Assigned(fOnInvalidDataSource) then
-
- fOnInvalidDataSource(fDataSet);
-
- fDataSet := nil;
-
- fDataSetName := '<INVALID>';
-
- fIndexNames := '';
-
- end
-
- else
-
- begin
-
- if (csDestroying in DataSet.ComponentState) then
-
- begin
-
- if Assigned(fOnInvalidDataSet) then
-
- fOnInvalidDataSet(fDataSet);
-
- fDataSet := nil;
-
- fDataSetName := '<INVALID>';
-
- fIndexNames := '';
-
- end
-
- else
-
- begin
-
- if Assigned(fOnDataSetClose) then
-
- fOnDataSetClose(DataSet);
-
- if DataSet <> nil then
-
- begin
-
- fDataSetName := DataSetName;
-
- fIndexNames := TTable(DataSet).IndexFieldNames;
-
- end;
-
- end;
-
- end;
-
- end;
-
- end;
-
-
-
- procedure TComponentDataLink.CheckBrowseMode;
-
- begin
-
-
-
- end;
-
-
-
- procedure TComponentDataLink.DataSetChanged;
-
- begin
-
- if TTable(DataSet).IndexFieldNames <> fIndexNames then
-
- begin
-
- fIndexNames := TTable(DataSet).IndexFieldNames;
-
- if Assigned(fOnIndexChange) then
-
- fOnIndexChange(DataSet);
-
- end
-
- else
-
- if Assigned(fOnDataSetChange) then
-
- fOnDataSetChange(DataSet);
-
- end;
-
-
-
- procedure TComponentDataLink.DataSetScrolled(Distance: Integer);
-
- begin
-
-
-
- end;
-
-
-
- procedure TComponentDataLink.FocusControl(Field: TFieldRef);
-
- begin
-
-
-
- end;
-
-
-
- procedure TComponentDataLink.EditingChanged;
-
- begin
-
-
-
- end;
-
-
-
- procedure TComponentDataLink.LayoutChanged;
-
- begin
-
- if Assigned(fOnLayoutChange) then
-
- fOnLayoutChange(DataSet);
-
- end;
-
-
-
- procedure TComponentDataLink.RecordChanged(Field: TField);
-
- begin
-
-
-
- end;
-
-
-
- procedure TComponentDataLink.UpdateData;
-
- begin
-
-
-
- end;
-
-
-
- end.
-
-